www.gusucode.com > matlab从零到进阶程序与数据 > matlab从零到进阶程序与数据/第12章 常微分方程(组)数值求解/examp12_3_3.m
function examp12_3_3 % nested function构造微分方程组,利用fsolve求解隐微分方程组某些输出项 function DyDt = DyDtNestedFun(t,y) fun = @(dy24)[dy24(1)*sin(y(4))+dy24(2)^2+2*y(1)*y(3)-y(1)*dy24(1)*y(4); y(1)*dy24(1)*dy24(2)+cos(dy24(2))-3*y(2)*y(3)]; options = optimset('display','off'); %使用fsolve求解出与原问题对应的x''和y'' dy24Zero = fsolve(fun,y([1,3]),options); DyDt = [y(2);dy24Zero(1);y(4);dy24Zero(2)];%状态变量一阶微分值 end tspan = [0,5];%时间区间 y0 = [1 0 0 1]'; [t y] = ode45(@DyDtNestedFun,tspan,y0); %画图结果展示 figure; plot(t,y(:,1),'k-','linewidth',2); hold on plot(t,y(:,2),'k--','linewidth',2); plot(t,y(:,3),'k-.','linewidth',2); plot(t,y(:,4),'k:','linewidth',2); %图例,位置自动选择最佳位置 L = legend('{\ity}_1(t)','{\ity}_2(t)','{\ity}_3(t)'... ,'{\ity}_4(t)','Location','best'); set(L,'fontname','Times New Roman'); xlabel('\itt','fontsize',16); end